package com.gd.iot.energy.controller.systemadmin;

import com.gd.iot.energy.annotation.SystemLogRecordMonitor;
import com.gd.iot.energy.entity.ResponseEntity;
import com.gd.iot.energy.pojo.common.vo.PageVO;
import com.gd.iot.energy.pojo.systemadmin.dto.HouseholdSaveDTO;
import com.gd.iot.energy.pojo.systemadmin.vo.EnumVO;
import com.gd.iot.energy.pojo.systemadmin.vo.HouseholdPageVO;
import com.gd.iot.energy.pojo.systemadmin.vo.HouseholdVO;
import com.gd.iot.energy.service.systemadmin.HouseholdService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 系统管理-档案管理-户号管理
 *
 * @author kris
 * @date Created at 2020/8/3 10:50
 */
@RestController
@RequestMapping("/admin/household")
@Api(value = "系统管理-档案管理-户号管理",tags = "系统管理-档案管理-户号管理")
public class HouseholdController {
    @Autowired
    private HouseholdService houseHoldService;

    @ApiOperation("获取户号分页列表")
    @SystemLogRecordMonitor("获取户号分页列表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "areaOrg", value = "区域编号", dataType = "string", paramType = "query", example = "", required = true),
            @ApiImplicitParam(name = "filterType", value = "过滤类型", dataType = "string", paramType = "query", example = "", required = false),
            @ApiImplicitParam(name = "filterValue", value = "过滤条件", dataType = "string", paramType = "query", example = "", required = false),
            @ApiImplicitParam(name = "pageSize", value = "每页数量", dataType = "string", paramType = "query", example = "", required = false),
            @ApiImplicitParam(name = "pageNum", value = "页码", dataType = "string", paramType = "query", example = "", required = false),
            @ApiImplicitParam(name = "orderColumn", value = "排序字段", dataType = "string", paramType = "query", example = "", required = false),
            @ApiImplicitParam(name = "orderType", value = "排序类型", dataType = "string", paramType = "query", example = "", required = false),
    })
    @PostMapping("/getPageList")
    public ResponseEntity<PageVO<HouseholdPageVO>> getPageList(
            @RequestParam(value = "areaOrg",required = true)Long areaOrg,
            @RequestParam(value = "filterType",required = false)Integer filterType,
            @RequestParam(value = "filterValue",required = false)String filterValue,
            @RequestParam(value = "pageSize",required = false,defaultValue = "10")Integer pageSize,
            @RequestParam(value = "pageNum",required = false,defaultValue = "1")Integer pageNum,
            @RequestParam(value = "orderColumn",required = false,defaultValue = "id") String orderColumn,
            @RequestParam(value = "orderType",required = false,defaultValue = "asc") String orderType
    ) {

        PageVO<HouseholdPageVO> pageVO = houseHoldService.getHouseHoldPageVOs(areaOrg,filterType,filterValue,pageSize,pageNum,orderColumn,orderType);
        return new ResponseEntity<>(pageVO);
    }

    @ApiOperation("获取户号列表")
    @SystemLogRecordMonitor("获取户号列表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "areaOrg", value = "区域编号", dataType = "string", paramType = "query", example = "", required = true),
            @ApiImplicitParam(name = "householdName", value = "户名", dataType = "string", paramType = "query", example = "", required = false)
    })
    @PostMapping("/getList")
    public ResponseEntity<List<HouseholdVO>> getList(@RequestParam(value = "areaOrg",required = true,defaultValue = "10")Long areaOrg,
                                                     @RequestParam(value = "householdName",required = false)String householdName) {

        List<HouseholdVO> houseHoldVOs = houseHoldService.getHouseHoldVOs(areaOrg, householdName);
        return new ResponseEntity<>(houseHoldVOs);
    }

    @ApiOperation("获取户号")
    @SystemLogRecordMonitor("获取户号")
    @PostMapping("/get")
    public ResponseEntity<HouseholdSaveDTO> get(Integer id){
        HouseholdSaveDTO houseHold = houseHoldService.getHouseHold(id);
        return new ResponseEntity<>(houseHold);
    }

    @ApiOperation("新增户号")
    @SystemLogRecordMonitor("新增户号")
    @PostMapping("/add")
    public ResponseEntity<Long> add(@RequestBody HouseholdSaveDTO householdSaveDTO){
        Long id = houseHoldService.add(householdSaveDTO);
        return new ResponseEntity<>(id);
    }

    @ApiOperation("更新户号")
    @SystemLogRecordMonitor("更新户号")
    @PostMapping("/update")
    public ResponseEntity<Boolean> update(@RequestBody HouseholdSaveDTO householdSaveDTO){
        boolean res = houseHoldService.update(householdSaveDTO);
        return new ResponseEntity<>(res);
    }

    @ApiOperation("删除户号")
    @SystemLogRecordMonitor("删除户号")
    @PostMapping("/delete")
    public ResponseEntity<Boolean> delete(@RequestBody List<Integer> ids){
        boolean res = houseHoldService.delete(ids);
        return new ResponseEntity<>(res);
    }

    @ApiOperation("获取相关枚举")
    @SystemLogRecordMonitor("获取相关枚举")
    @PostMapping("/getEquipmentType")
    public ResponseEntity<Map<String, List<EnumVO>>> getEquipmentType(){
        Map<String, List<EnumVO>> enums = houseHoldService.getEnums();
        return new ResponseEntity<>(enums);
    }
}
